﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KBManagement.DAL;
using KBManagement.BIZ;
using KBManagement.Library;

namespace KBManagement
{
    public partial class AddEmployee : Form
    {
        KBSQLClassDataContext context;
        TransactionLog transactionLog;
        public AddEmployee()
        {
            transactionLog = new TransactionLog();
            context = new KBSQLClassDataContext();
            InitializeComponent();
            BindingCombobox();
        }

        public void BindingCombobox()
        {
            var position = from fc in context.Positions select fc;
            cbbPosition.DataSource = position;
            cbbPosition.DisplayMember = "Ps_Name";
            cbbPosition.ValueMember = "ID";

            var timeSlot = from fc in context.TimeSlots select fc;
            cbbTimeSlot.DataSource = timeSlot;
            cbbTimeSlot.DisplayMember = "Ts_Name";
            cbbTimeSlot.ValueMember = "ID";
        }


        public void insertEmployee()
        {
            Boolean isValid = validateAddEmployee();
            if (isValid)
            {
                Random random = new Random();
                string gender = "";
                if (rdbMaleEmp.Checked)
                {
                    gender = "Nam";
                }
                if (rdbFemaleEmp.Checked)
                {
                    gender = "Nữ";
                }
                var employee = new Employee
                {
                    ID = random.Next(8).ToString(),
                    FullName = txtNameEmp.Text,
                    Gender = gender,
                    BirthDay = new DateTime(Convert.ToInt32(txtYearEmp.Text), Convert.ToInt32(cbbMonthEmp.Text), Convert.ToInt32(cbbDayEmp.Text)),
                    Email = txtEmailEmp.Text,
                    Phone = txtPhoneEmp.Text,
                    Address = txtAddressEmp.Text,
                    PositionID = Convert.ToInt32(cbbPosition.SelectedValue.ToString()),
                    TimeSlotID = Convert.ToInt32(cbbTimeSlot.SelectedValue.ToString())
                };

                ConfirmAddEmployee confirmAddEmployee = new ConfirmAddEmployee(employee);
                if (confirmAddEmployee.ShowDialog() == DialogResult.OK)
                {
                    context.Employees.InsertOnSubmit(employee);
                    context.SubmitChanges();
                    transactionLog.TransactionLogCommon("Nhan vien "+AdminSession.admin.UserName+" them moi nhan vien " + txtNameEmp.Text+" vào lúc "+DateTime.Now);
                    MessageBox.Show("Them nhan vien moi thanh cong");
                    Close();
                    resetFormEmployee();
                    Utils.CreateInstance().NotificationInforObserver();
                }
            }

        }
        

        public Boolean validateAddEmployee()
        {
            Utils util = Utils.CreateInstance();
            if (util.isNull(txtNameEmp.Text))
            {
                MessageBox.Show("Xin mời điền tên của nhân viên","",MessageBoxButtons.OK,MessageBoxIcon.Error);
                return false;
            }
            if (!util.isNumber(cbbDayEmp.Text))
            {
                MessageBox.Show("Xin mời chọn ngày sinh của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (!util.isNumber(cbbMonthEmp.Text))
            {
                MessageBox.Show("Xin mời chọn tháng sinh của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (util.isNull(txtYearEmp.Text))
            {
                MessageBox.Show("Xin mời điền năm sinh của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (!util.isNumber(txtYearEmp.Text))
            {
                MessageBox.Show("Năm sinh không đúng", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (!rdbFemaleEmp.Checked && !rdbMaleEmp.Checked)
            {
                MessageBox.Show("Xin mời chọn giới tính của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (util.isNull(txtAddressEmp.Text))
            {
                MessageBox.Show("Xin mời điền địa chỉ của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (util.isNull(txtPhoneEmp.Text))
            {
                MessageBox.Show("Xin mời điền Số điện thoại của nhân viên", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        private void resetFormEmployee()
        {
            txtNameEmp.Text = "";
            txtAddressEmp.Text = "";
            txtEmailEmp.Text = "";
            txtPhoneEmp.Text = "";
            txtYearEmp.Text = "";
            rdbFemaleEmp.Checked = false;
            rdbMaleEmp.Checked = false;
            cbbDayEmp.SelectedIndex = 0;
            cbbMonthEmp.SelectedIndex = 0;
            cbbPosition.SelectedIndex = 0;
            cbbTimeSlot.SelectedIndex = 0;
        }

        private void btnAddEmp_Click(object sender, EventArgs e)
        {

            try
            {
                insertEmployee();
            }
            catch (Exception)
            {
                
                MessageBox.Show("Thông tin bạn nhập có thể không lưu được vì xảy ra lỗi.Lỗi đã được hệ thống ghi lại và chờ xử lý");
            }

        }
    }
}
